*/
-#include "defs.h"
#include <ctype.h>
+#include <math.h>
+#include <string.h>
+#include "defs.h"
+#include "avltree.h"
#define MYNAME "humminbird"
-#define EAST_SCALE 20038297.0 /* this is i1924_equ_axis*M_PI */
-#define i1924_equ_axis 6378388.0
-#define i1924_polar_axis 6356911.946
+#define WPT_NAME_LEN 12
+#define RTE_NAME_LEN 20
+#define MAX_RTE_POINTS 50
-static
-arglist_t humminbird_args[] = {
-// {"foo", &fooopt, "The text of the foo option in help",
-// "default", ARGYTPE_STRING, ARG_NOMINMAX},
- ARG_TERMINATOR
-};
+#define WPT_MAGIC 0x02020024L
+#define RTE_MAGIC 0x03030088L
+
+#define EAST_SCALE 20038297.0 /* this is i1924_equ_axis*M_PI */
+#define i1924_equ_axis 6378388.0
+#define i1924_polar_axis 6356911.946
+
+#define BAD_CHARS "\r\n\t"
/* The hwr data format is records-based, and the records are 36 bytes long. */
typedef struct humminbird_waypt_s {
- gbuint32 signature; /* Just for error checking(?) */
- gbuint16 num; /* Always ascending in the file. */
- gbuint16 zero; /* Always seems to be zero. */
- gbuint8 status; /* Always seems to be 1 */
- gbuint8 icon; /* See below */
- gbuint16 depth; /* Water depth. These are fishfinders. In centimeters */
- gbuint32 time; /* This is a time_t. In UTC */
- gbint32 east;
- gbint32 north;
- char name[12];
+ /* O.K.: the file can also contain routes with a different magic. */
+ /* gbuint32 signature; */ /* Just for error checking(?) */
+ gbuint16 num; /* Always ascending in the file. */
+ gbuint16 zero; /* Always seems to be zero. */
+ gbuint8 status; /* Always seems to be 1 */
+ gbuint8 icon; /* See below */
+ gbuint16 depth; /* Water depth. These are fishfinders. In centimeters */
+ gbuint32 time; /* This is a time_t. In UTC */
+ gbint32 east;
+ gbint32 north;
+ char name[WPT_NAME_LEN];
} humminbird_waypt_t;
+typedef struct humminbird_rte_s {
+ /* O.K.: the file can contain also routes with a different magic. */
+ /* gbuint32 signature; */ /* Just for error checking(?) */
+ gbuint16 num;
+ gbuint16 zero;
+ gbuint8 status;
+ gbuint8 U0;
+ gbuint8 U1;
+ gbint8 count;
+ gbuint32 time;
+ char name[RTE_NAME_LEN];
+ gbuint16 points[MAX_RTE_POINTS];
+} humminbird_rte_t;
+
static const char* humminbird_icons[] = {
"Normal", /* 0 */
"House", /* 1 */
static gbfile* fin;
static gbfile* fout;
-static int waypoint_num = 0;
+static int waypoint_num;
+static short_handle wptname_sh, rtename_sh;
+static avltree_t *waypoints;
+static humminbird_rte_t *humrte;
+static int rte_num;
+
+static
+arglist_t humminbird_args[] = {
+ ARG_TERMINATOR
+};
/* Takes a latitude in degrees,
* returns a latitude in degrees. */
geodetic_to_geocentric_hwr(const double gd_lat) {
const double cos_ae = 0.9966349016452;
const double cos2_ae = cos_ae * cos_ae;
-
const double gdr = gd_lat *M_PI / 180.0;
return atan(cos2_ae * tan(gdr)) * 180.0/M_PI;
static double
geocentric_to_geodetic_hwr(const double gc_lat) {
const double cos_ae = 0.9966349016452;
-
const double cos2_ae = cos_ae * cos_ae;
-
const double gcr = gc_lat *M_PI / 180.0;
return atan( tan(gcr)/cos2_ae ) * 180.0/M_PI;
static void
humminbird_rd_init(const char *fname)
{
- fin = gbfopen(fname, "r", MYNAME);
+ fin = gbfopen_be(fname, "rb", MYNAME);
+ waypoints = avltree_init(0, MYNAME);
}
static void
humminbird_rd_deinit(void)
{
+ avltree_done(waypoints);
gbfclose(fin);
}
humminbird_read(void)
{
while(! gbfeof(fin)) {
- humminbird_waypt_t w;
- double guder;
- int bytes, num_icons;
- waypoint *wpt;
-
- bytes = gbfread(&w, 1, sizeof(humminbird_waypt_t), fin);
- if(bytes == 0) break;
-
- is_fatal((bytes != sizeof(humminbird_waypt_t)),
- MYNAME ": Unexpected end of file (%d)!",
- (int) sizeof(humminbird_waypt_t) - bytes);
-
- /* Fix endianness - these are now BE */
- w.signature = be_read32(&w.signature);
- w.num = be_read16(&w.num);
- w.zero = be_read16(&w.zero);
- w.depth = be_read16(&w.depth);
- w.time = be_read32(&w.time);
- w.north = be_read32(&w.north);
- w.east = be_read32(&w.east);
-
- is_fatal(( w.signature != 0x02020024L ),
- MYNAME ": Invalid record header (no or unknown humminbird file)!");
-
- /* All right! Copy the data to the gpsbabel struct... */
+ gbuint32 signature;
+
+ signature = gbfgetuint32(fin);
- wpt = waypt_new();
+ if (signature == WPT_MAGIC) { /* a waypoint */
+ humminbird_waypt_t w;
+ double guder;
+ int num_icons;
+ waypoint *wpt;
+ char buff[10];
+
+ if (! gbfread(&w, 1, sizeof(w), fin))
+ fatal(MYNAME ": Unexpected end of file!\n");
+
+ /* Fix endianness - these are now BE */
+ w.num = be_read16(&w.num);
+ w.zero = be_read16(&w.zero);
+ w.depth = be_read16(&w.depth);
+ w.time = be_read32(&w.time);
+ w.north = be_read32(&w.north);
+ w.east = be_read32(&w.east);
- wpt->shortname = xstrndup(w.name, sizeof(w.name));
- wpt->creation_time = w.time;
+ /* All right! Copy the data to the gpsbabel struct... */
- guder = gudermannian_i1924(w.north);
- wpt->latitude = geocentric_to_geodetic_hwr(guder);
- wpt->longitude = (double)w.east / EAST_SCALE * 180.0;
+ wpt = waypt_new();
- wpt->altitude = 0.0; /* It's from a fishfinder... */
+ wpt->shortname = xstrndup(w.name, sizeof(w.name));
+ wpt->creation_time = w.time;
+
+ guder = gudermannian_i1924(w.north);
+ wpt->latitude = geocentric_to_geodetic_hwr(guder);
+ wpt->longitude = (double)w.east / EAST_SCALE * 180.0;
+
+ wpt->altitude = 0.0; /* It's from a fishfinder... */
- if(w.depth != 0)
- WAYPT_SET(wpt,depth,(double)w.depth / 100.0);
+ if (w.depth != 0)
+ WAYPT_SET(wpt,depth,(double)w.depth / 100.0);
+
+ num_icons = sizeof(humminbird_icons) / sizeof(humminbird_icons[0]);
+ if (w.icon < num_icons)
+ wpt->icon_descr = humminbird_icons[w.icon];
- num_icons = sizeof(humminbird_icons) / sizeof(humminbird_icons[0]);
- if(w.icon < num_icons)
- wpt->icon_descr = humminbird_icons[w.icon];
+ waypt_add(wpt);
+
+ /* register the point over his internal Humminbird "Number" */
+ snprintf(buff, sizeof(buff), "%d", w.num);
+ avltree_insert(waypoints, buff, wpt);
+
+ }
+ else if (signature == RTE_MAGIC) { /* here comes a route */
+ humminbird_rte_t hrte;
+
+ if (! gbfread(&hrte, 1, sizeof(hrte), fin))
+ fatal(MYNAME ": Unexpected end of file!\n");
+
+ hrte.time = be_read32(&hrte.time);
+ hrte.num = be_read16(&hrte.num);
+
+ if (hrte.count > 0) {
+ int i;
+ route_head *rte = NULL;
+
+ for (i = 0; i < hrte.count; i++) {
+ waypoint *wpt;
+ char buff[10];
+ hrte.points[i] = be_read16(&hrte.points[i]);
+
+ /* locate the point over his internal Humminbird "Number" */
+ snprintf(buff, sizeof(buff), "%d", hrte.points[i]);
+ if (avltree_find(waypoints, buff, (void *) &wpt)) {
+ if (rte == NULL) {
+ rte = route_head_alloc();
+ route_add_head(rte);
+ rte->rte_name = xstrndup(hrte.name, sizeof(hrte.name));
+ /* rte->rte_num = hrte.num + 1; only internal number */
+ }
+ route_add_wpt(rte, waypt_dupe(wpt));
+ }
+ }
+ }
+ }
+ else
+ fatal(MYNAME ": Invalid record header (no or unknown humminbird file)!\n");
- waypt_add(wpt);
}
}
+
+/************************************************************************************************/
+
static void
humminbird_wr_init(const char *fname)
{
- fout = gbfopen(fname, "w", MYNAME);
+ fout = gbfopen_be(fname, "wb", MYNAME);
+
+ wptname_sh = mkshort_new_handle();
+
+ setshort_length(wptname_sh, WPT_NAME_LEN - 1);
+ setshort_badchars(wptname_sh, BAD_CHARS);
+ setshort_mustupper(wptname_sh, 0);
+ setshort_mustuniq(wptname_sh, 0);
+ setshort_whitespace_ok(wptname_sh, 1);
+ setshort_repeating_whitespace_ok(wptname_sh, 1);
+ setshort_defname(wptname_sh, "WPT");
+
+ rtename_sh = mkshort_new_handle();
+ setshort_length(rtename_sh, RTE_NAME_LEN - 1);
+ setshort_badchars(rtename_sh, BAD_CHARS);
+ setshort_mustupper(rtename_sh, 0);
+ setshort_mustuniq(rtename_sh, 0);
+ setshort_whitespace_ok(rtename_sh, 1);
+ setshort_repeating_whitespace_ok(rtename_sh, 1);
+ setshort_defname(rtename_sh, "Route");
+
+ waypoints = avltree_init(0, MYNAME);
+
+ waypoint_num = 0;
+ rte_num = 0;
}
static void
humminbird_wr_deinit(void)
{
+ avltree_done(waypoints);
+ mkshort_del_handle(&wptname_sh);
+ mkshort_del_handle(&rtename_sh);
gbfclose(fout);
}
double lon, north, east;
int i;
int num_icons = sizeof(humminbird_icons) / sizeof(humminbird_icons[0]);
+ char *name;
- be_write32(&hum.signature, 0x02020024L);
be_write16(&hum.num, waypoint_num++);
hum.zero = 0;
hum.status = 1;
- hum.icon = 0;
-
+ hum.icon = 255;
+
// Icon....
- if(wpt->icon_descr) {
- for(i=0 ; i<num_icons ; i++) {
- if(!strcmp(wpt->icon_descr, humminbird_icons[i])) {
+ if (wpt->icon_descr) {
+ for (i = 0; i < num_icons; i++) {
+ if (!case_ignore_strcmp(wpt->icon_descr, humminbird_icons[i])) {
hum.icon = i;
break;
}
}
+ if (hum.icon == 255) { /* no success, no try to find the item in a more comlex name */
+ hum.icon = 0; /* i.e. "Diamond" as part of "Diamond, Green" or "Green Diamond" */
+ for (i = 0; i < num_icons; i++) {
+ char *match;
+ int j;
+ xasprintf(&match, "*%s*", humminbird_icons[i]);
+ j = case_ignore_str_match(wpt->icon_descr, match);
+ xfree(match);
+ if (j != 0) {
+ hum.icon = i;
+ break;
+ }
+ }
+ }
}
- hum.depth = round(WAYPT_GET(wpt, depth, 0)*100.0);
- be_write16(&hum.depth, hum.depth);
-
+
+ hum.depth = si_round(WAYPT_GET(wpt, depth, 0)*100.0);
+ be_write16(&hum.depth, hum.depth);
+
be_write32(&hum.time, wpt->creation_time);
-
+
east = wpt->longitude / 180.0 * EAST_SCALE;
- be_write32(&hum.east, (gbint32)round((east)));
+ be_write32(&hum.east, si_round((east)));
lon = geodetic_to_geocentric_hwr(wpt->latitude);
north = inverse_gudermannian_i1924(lon);
- be_write32(&hum.north, (gbint32)round(north));
+ be_write32(&hum.north, si_round(north));
- strncpy((char *)&hum.name, wpt->shortname, 12);
+ name = (global_opts.synthesize_shortnames)
+ ? mkshort_from_wpt(wptname_sh, wpt)
+ : mkshort(wptname_sh, wpt->shortname);
+ memset(&hum.name, 0, sizeof(hum.name));
+ memcpy(&hum.name, name, strlen(name));
+ xfree(name);
+
+ gbfputuint32(WPT_MAGIC, fout);
gbfwrite(&hum, sizeof(hum), 1, fout);
}
+static void
+humminbird_rte_head(const route_head *rte)
+{
+ humrte = NULL;
+ if (rte->rte_waypt_ct > 0)
+ humrte = xcalloc(1, sizeof(*humrte));
+}
+
+static void
+humminbird_rte_tail(const route_head *rte)
+{
+ if (humrte == NULL) return;
+
+ if (humrte->count > 0) {
+ int i;
+ char *name;
+
+ humrte->num = rte_num++;
+ humrte->time = gpsbabel_time;
+ for (i = 0; i < humrte->count; i++)
+ be_write16(&humrte->points[i], humrte->points[i]);
+
+ be_write16(&humrte->num, humrte->num);
+ be_write32(&humrte->time, humrte->time);
+
+ name = mkshort(rtename_sh, rte->rte_name);
+ strncpy(humrte->name, name, sizeof(humrte->name));
+ xfree(name);
+
+ gbfputuint32(RTE_MAGIC, fout);
+ gbfwrite(humrte, sizeof(*humrte), 1, fout);
+ }
+
+ xfree(humrte);
+ humrte = NULL;
+}
+
+static void
+humminbird_write_rtept(const waypoint *wpt)
+{
+ union {
+ void *p;
+ int i;
+ } x;
+
+ if (humrte == NULL) return;
+ x.p = wpt->extra_data;
+ if (x.i <= 0) return;
+
+ if (humrte->count < MAX_RTE_POINTS) {
+ humrte->points[humrte->count] = x.i - 1;
+ humrte->count++;
+ }
+ else {
+ warning(MYNAME ": Sorry, routes are limited to %d points!\n", MAX_RTE_POINTS);
+ fatal(MYNAME ": You can use our simplify filter to reduce the number of route points.\n");
+ }
+}
+
+static void
+humminbird_write_waypoint_wrapper(const waypoint *wpt)
+{
+ char *key;
+ waypoint *tmpwpt;
+ union { /* Pointers as extra_data are 64-bit in a 64-bit world. */
+ void *p; /* What we do is to misuse a pointer as an integer, but 'int' is */
+ int i; /* (mostly) a 32-bit entity. With this union the compiler keeps quiet! */
+ } x = { NULL }; /* Any ideas to a compiler friendly assign of a 32-bit integer to a 64-bit pointer ? */
+
+ xasprintf(&key, "%s\01%.9f\01\%.9f", wpt->shortname, wpt->latitude, wpt->longitude);
+
+ if (! avltree_find(waypoints, key, (void *)&tmpwpt)) {
+ tmpwpt = (waypoint *)wpt;
+
+ avltree_insert(waypoints, key, wpt);
+
+ x.i = waypoint_num + 1; /* NOT NULL */
+ tmpwpt->extra_data = x.p;
+ humminbird_write_waypoint(wpt);
+ }
+ else {
+ x.p = tmpwpt->extra_data;
+ tmpwpt = (waypoint *)wpt;
+ tmpwpt->extra_data = x.p;
+ }
+
+ xfree(key);
+}
+
static void
humminbird_write(void)
{
- waypoint_num = 0;
- waypt_disp_all(humminbird_write_waypoint);
+ waypt_disp_all(humminbird_write_waypoint_wrapper);
+ route_disp_all(NULL, NULL, humminbird_write_waypoint_wrapper);
+ route_disp_all(humminbird_rte_head, humminbird_rte_tail, humminbird_write_rtept);
}
/**************************************************************************/
// capabilities below means: we can only read and write waypoints
+
ff_vecs_t humminbird_vecs = {
ff_type_file,
{
- ff_cap_read | ff_cap_write /* waypoints */,
- ff_cap_none /* tracks */,
- ff_cap_none /* routes */
+ ff_cap_read | ff_cap_write /* waypoints */,
+ ff_cap_none /* tracks */,
+ ff_cap_read | ff_cap_write /* routes */
},
- humminbird_rd_init,
- humminbird_wr_init,
- humminbird_rd_deinit,
- humminbird_wr_deinit,
+ humminbird_rd_init,
+ humminbird_wr_init,
+ humminbird_rd_deinit,
+ humminbird_wr_deinit,
humminbird_read,
humminbird_write,
NULL, // humminbird_exit,
humminbird_args,
- CET_CHARSET_ASCII, 0 /* ascii is the expected character set */
- /* not fixed, can be changed through command line parameter */
+ CET_CHARSET_ASCII, 1 /* ascii is the expected character set */
+ /* currently fixed !!! */
};
+
/**************************************************************************/
--- /dev/null
+No,Latitude,Longitude,Name,Altitude,Symbol,Depth,Date,Time\r
+1,30.000000,29.999999,"030-030",0.0,"Normal",30.0,2008/08/14,22:03:10\r
+2,40.000004,40.000001,"040-040",0.0,"Normal",40.0,,00:00:01\r
+3,50.000003,50.000003,"050-050",0.0,"Normal",50.0,2008/08/14,22:04:32\r
+4,0.000000,0.000000,"000-000",0.0,"Normal",,2008/08/14,22:04:28\r
+5,9.999996,10.000002,"010-010",0.0,"Normal",10.0,2008/08/14,22:03:15\r
+6,19.999999,19.999996,"020-020",0.0,"Normal",20.0,2008/08/14,22:03:13\r
+7,-19.999999,-19.999996,"020-020-",0.0,"Normal",,2008/08/14,22:13:35\r
+8,50.877338,12.433892,"B93",0.0,"Normal",,,\r
+9,50.964954,12.435922,"Altnbrg-mgh",0.0,"Normal",,2005/06/24,00:50:24\r
+10,50.610797,12.173804,"Piehlrstrss",0.0,"Normal",,2005/02/26,08:59:59\r
+11,50.844124,12.408758,"Gosel",0.0,"Normal",,2005/02/26,09:10:47\r
+12,50.654766,12.204956,"Augst-Bbl-S",0.0,"Normal",,2005/02/26,08:57:04\r
+13,50.493663,12.107152,"Jahnstrss11",0.0,"Normal",,2005/02/26,09:02:20\r
+14,50.493835,12.106101,"Libknchts90",0.0,"Normal",,2005/02/26,09:03:15\r
+15,50.492620,12.105445,"Start",0.0,"Normal",,2005/11/08,23:03:32\r
+16,51.314520,12.409144,"P+R Am Vlkr",0.0,"Normal",,2005/06/24,00:36:57\r
+17,-9.999996,-10.000002,"010-010-",0.0,"Normal",,2008/08/14,22:13:38\r
+18,-30.000000,-29.999999,"030-030-",0.0,"Normal",,2008/08/14,22:13:32\r
+19,60.000002,59.999997,"060-060",0.0,"Normal",60.0,2008/08/14,22:07:34\r
+20,69.999999,70.000000,"070-070",0.0,"Normal",,2008/08/14,22:11:15\r
+21,-40.000004,40.000001,"040-040-",0.0,"Normal",,2008/08/14,22:13:30\r
+22,-50.000003,-50.000003,"050-050-",0.0,"Normal",,2008/08/14,22:14:16\r
+23,-60.000002,-59.999997,"060-060-",0.0,"Normal",,2008/08/14,22:15:44\r
+24,-69.999999,-70.000000,"070-070-",0.0,"Normal",,2008/08/14,22:17:58\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="42.401053392" minlon="-71.126604222" maxlat="42.468653151" maxlon="-71.102970477"/>
+<wpt lat="42.438878118" lon="-71.119274258">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5066</name>
+ <cmt>5066</cmt>
+ <desc>5066</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.439224112" lon="-71.119687466">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>5067</name>
+ <cmt>5067</cmt>
+ <desc>5067</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.438918040" lon="-71.116148244">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>5096</name>
+ <cmt>5096</cmt>
+ <desc>5096</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.443901493" lon="-71.122040960">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5142</name>
+ <cmt>5142</cmt>
+ <desc>5142</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.447301189" lon="-71.121448095">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>5156</name>
+ <cmt>5156</cmt>
+ <desc>5156</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.454871665" lon="-71.125095112">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5224</name>
+ <cmt>5224</cmt>
+ <desc>5224</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.459082260" lon="-71.124987318">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5229</name>
+ <cmt>5229</cmt>
+ <desc>5229</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.456980324" lon="-71.124475298">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5237</name>
+ <cmt>5237</cmt>
+ <desc>5237</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.454399368" lon="-71.120989972">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5254</name>
+ <cmt>5254</cmt>
+ <desc>5254</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.451439120" lon="-71.121744527">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5258</name>
+ <cmt>5258</cmt>
+ <desc>5258</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.454406020" lon="-71.120657609">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5264</name>
+ <cmt>5264</cmt>
+ <desc>5264</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.457758580" lon="-71.121043869">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>526708</name>
+ <cmt>526708</cmt>
+ <desc>526708</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.457086752" lon="-71.120316262">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>526750</name>
+ <cmt>526750</cmt>
+ <desc>526750</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.456594517" lon="-71.119678484">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527614</name>
+ <cmt>527614</cmt>
+ <desc>527614</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.456255272" lon="-71.119355103">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527631</name>
+ <cmt>527631</cmt>
+ <desc>527631</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.458151031" lon="-71.119130533">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5278</name>
+ <cmt>5278</cmt>
+ <desc>5278</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.459374929" lon="-71.117693285">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5289</name>
+ <cmt>5289</cmt>
+ <desc>5289</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.464183815" lon="-71.119831191">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5374FIRE</name>
+ <cmt>5374FIRE</cmt>
+ <desc>5374FIRE</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.465647026" lon="-71.119400017">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>5376</name>
+ <cmt>5376</cmt>
+ <desc>5376</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.439017846" lon="-71.114459477">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6006</name>
+ <cmt>6006</cmt>
+ <desc>6006</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.438592006" lon="-71.114800824">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6006BLUE</name>
+ <cmt>6006BLUE</cmt>
+ <desc>6006BLUE</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.436755537" lon="-71.113219851">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.441752469" lon="-71.113219851">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6029</name>
+ <cmt>6029</cmt>
+ <desc>6029</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.436243179" lon="-71.109078780">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6053</name>
+ <cmt>6053</cmt>
+ <desc>6053</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.439250726" lon="-71.107497808">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6066</name>
+ <cmt>6066</cmt>
+ <desc>6066</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.439763060" lon="-71.107578653">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6067</name>
+ <cmt>6067</cmt>
+ <desc>6067</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.434765967" lon="-71.105871921">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6071</name>
+ <cmt>6071</cmt>
+ <desc>6071</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.433302030" lon="-71.106599528">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6073</name>
+ <cmt>6073</cmt>
+ <desc>6073</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.437341084" lon="-71.104776020">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6084</name>
+ <cmt>6084</cmt>
+ <desc>6084</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.442198248" lon="-71.110974151">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6130</name>
+ <cmt>6130</cmt>
+ <desc>6130</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.442983343" lon="-71.111441257">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>6131</name>
+ <cmt>6131</cmt>
+ <desc>6131</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.444773057" lon="-71.108881159">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6153</name>
+ <cmt>6153</cmt>
+ <desc>6153</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.443588791" lon="-71.106303096">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6171</name>
+ <cmt>6171</cmt>
+ <desc>6171</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.447806803" lon="-71.106626476">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6176</name>
+ <cmt>6176</cmt>
+ <desc>6176</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.448445467" lon="-71.106159371">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6177</name>
+ <cmt>6177</cmt>
+ <desc>6177</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.453414852" lon="-71.106779184">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6272</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.453434809" lon="-71.107255272">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6272</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.458297368" lon="-71.106770201">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6278</name>
+ <cmt>6278</cmt>
+ <desc>6278</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.451432468" lon="-71.105413798">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6280</name>
+ <cmt>6280</cmt>
+ <desc>6280</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.453847243" lon="-71.105207194">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6283</name>
+ <cmt>6283</cmt>
+ <desc>6283</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.459986868" lon="-71.106168354">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6289</name>
+ <cmt>6289</cmt>
+ <desc>6289</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.457618894" lon="-71.105117366">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6297</name>
+ <cmt>6297</cmt>
+ <desc>6297</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.467110202" lon="-71.113570180">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>6328</name>
+ <cmt>6328</cmt>
+ <desc>6328</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.464203768" lon="-71.109860284">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6354</name>
+ <cmt>6354</cmt>
+ <desc>6354</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.466458428" lon="-71.110066888">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635722</name>
+ <cmt>635722</cmt>
+ <desc>635722</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.466558190" lon="-71.109411144">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635783</name>
+ <cmt>635783</cmt>
+ <desc>635783</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.463492103" lon="-71.107120530">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6373</name>
+ <cmt>6373</cmt>
+ <desc>6373</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.401053392" lon="-71.110237562">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6634</name>
+ <cmt>6634</cmt>
+ <desc>6634</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.432623283" lon="-71.106527665">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6979</name>
+ <cmt>6979</cmt>
+ <desc>6979</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.431032858" lon="-71.107884068">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6997</name>
+ <cmt>6997</cmt>
+ <desc>6997</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.465686931" lon="-71.107363066">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>BEAR HILL</name>
+ <cmt>BEAR HILL</cmt>
+ <desc>BEAR HILL</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.430953003" lon="-71.107623567">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:15Z</time>
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>BELLEVUE</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.438665198" lon="-71.114082200">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6016</name>
+ <cmt>6016</cmt>
+ <desc>6016</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.456468132" lon="-71.124654954">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5236BRIDGE</name>
+ <cmt>5236BRIDGE</cmt>
+ <desc>5236BRIDGE</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.465760091" lon="-71.119813226">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5376BRIDGE</name>
+ <cmt>5376BRIDGE</cmt>
+ <desc>5376BRIDGE</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.442989996" lon="-71.105880904">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6181CROSS</name>
+ <cmt>6181CROSS</cmt>
+ <desc>6181CROSS</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.435471307" lon="-71.109662662">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6042CROSS</name>
+ <cmt>6042CROSS</cmt>
+ <desc>6042CROSS</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.458516872" lon="-71.103644187">
+ <ele>0.000000</ele>
+ <name>DARKHOLLPO</name>
+ <cmt>DARKHOLLPO</cmt>
+ <desc>DARKHOLLPO</desc>
+ <sym>Fish</sym>
+</wpt>
+<wpt lat="42.443109756" lon="-71.112671900">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6121DEAD</name>
+ <cmt>6121DEAD</cmt>
+ <desc>6121DEAD</desc>
+ <sym>Danger</sym>
+</wpt>
+<wpt lat="42.449869134" lon="-71.119301206">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5179DEAD</name>
+ <cmt>5179DEAD</cmt>
+ <desc>5179DEAD</desc>
+ <sym>Danger</sym>
+</wpt>
+<wpt lat="42.459627687" lon="-71.116525521">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5299DEAD</name>
+ <cmt>5299DEAD</cmt>
+ <desc>5299DEAD</desc>
+ <sym>Danger</sym>
+</wpt>
+<wpt lat="42.465487404" lon="-71.119148498">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>5376DEAD</name>
+ <cmt>5376DEAD</cmt>
+ <desc>5376DEAD</desc>
+ <sym>Danger</sym>
+</wpt>
+<wpt lat="42.462773779" lon="-71.109986043">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6353DEAD</name>
+ <cmt>6353DEAD</cmt>
+ <desc>6353DEAD</desc>
+ <sym>Danger</sym>
+</wpt>
+<wpt lat="42.446795571" lon="-71.108782348">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6155DEAD</name>
+ <cmt>6155DEAD</cmt>
+ <desc>6155DEAD</desc>
+ <sym>Danger</sym>
+</wpt>
+<wpt lat="42.451206286" lon="-71.126604222">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>GATE14</name>
+ <cmt>GATE14</cmt>
+ <desc>GATE14</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.458496917" lon="-71.122076891">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>GATE16</name>
+ <cmt>GATE16</cmt>
+ <desc>GATE16</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.459374929" lon="-71.119238326">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>GATE17</name>
+ <cmt>GATE17</cmt>
+ <desc>GATE17</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.466352015" lon="-71.119238326">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>GATE19</name>
+ <cmt>GATE19</cmt>
+ <desc>GATE19</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.468653151" lon="-71.107695429">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>GATE21</name>
+ <cmt>GATE21</cmt>
+ <desc>GATE21</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.456720903" lon="-71.102970477">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>GATE24</name>
+ <cmt>GATE24</cmt>
+ <desc>GATE24</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.430846529" lon="-71.107686447">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>GATE5</name>
+ <cmt>GATE5</cmt>
+ <desc>GATE5</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.431239149" lon="-71.109240471">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>GATE6</name>
+ <cmt>GATE6</cmt>
+ <desc>GATE6</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.439503567" lon="-71.106554614">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:16Z</time>
+ <name>6077LOGS</name>
+ <cmt>6077LOGS</cmt>
+ <desc>6077LOGS</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.449762692" lon="-71.122319427">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5148NANEPA</name>
+ <cmt>5148NANEPA</cmt>
+ <desc>5148NANEPA</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.457386083" lon="-71.119849157">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5267OBSTAC</name>
+ <cmt>5267OBSTAC</cmt>
+ <desc>5267OBSTAC</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.434978901" lon="-71.109941129">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>PANTHRCAVE</name>
+ <cmt>PANTHRCAVE</cmt>
+ <desc>PANTHRCAVE</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.453255199" lon="-71.121214542">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5252PURPLE</name>
+ <cmt>5252PURPLE</cmt>
+ <desc>5252PURPLE</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.457731973" lon="-71.117477698">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5287WATER</name>
+ <cmt>5287WATER</cmt>
+ <desc>5287WATER</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.459275155" lon="-71.124574109">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5239ROAD</name>
+ <cmt>5239ROAD</cmt>
+ <desc>5239ROAD</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.458782938" lon="-71.118986808">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5278ROAD</name>
+ <cmt>5278ROAD</cmt>
+ <desc>5278ROAD</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.439995937" lon="-71.120927093">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:14Z</time>
+ <name>5058ROAD</name>
+ <cmt>5058ROAD</cmt>
+ <desc>5058ROAD</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.453414852" lon="-71.106779184">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:13Z</time>
+ <name>SHEEPFOLD</name>
+ <cmt>SHEEPFOLD</cmt>
+ <desc>SHEEPFOLD</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.455955937" lon="-71.107479842">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>SOAPBOX</name>
+ <cmt>SOAPBOX</cmt>
+ <desc>SOAPBOX</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.465913061" lon="-71.119328154">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5376STREAM</name>
+ <cmt>5376STREAM</cmt>
+ <desc>5376STREAM</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.445358528" lon="-71.122849412">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5144SUMMIT</name>
+ <cmt>5144SUMMIT</cmt>
+ <desc>5144SUMMIT</desc>
+ <sym>Normal</sym>
+</wpt>
+<wpt lat="42.441725856" lon="-71.121672665">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:16Z</time>
+ <name>5150TANK</name>
+ <cmt>5150TANK</cmt>
+ <desc>5150TANK</desc>
+ <sym>Normal</sym>
+</wpt>
+<rte>
+ <name>BELLEVUE</name>
+ <rtept lat="42.430953003" lon="-71.107623567">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:15Z</time>
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>BELLEVUE</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.431239149" lon="-71.109240471">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>GATE6</name>
+ <cmt>GATE6</cmt>
+ <desc>GATE6</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.434978901" lon="-71.109941129">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>PANTHRCAVE</name>
+ <cmt>PANTHRCAVE</cmt>
+ <desc>PANTHRCAVE</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.436755537" lon="-71.113219851">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.439017846" lon="-71.114459477">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6006</name>
+ <cmt>6006</cmt>
+ <desc>6006</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.438592006" lon="-71.114800824">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6006BLUE</name>
+ <cmt>6006BLUE</cmt>
+ <desc>6006BLUE</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.438918040" lon="-71.116148244">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>5096</name>
+ <cmt>5096</cmt>
+ <desc>5096</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.438878118" lon="-71.119274258">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5066</name>
+ <cmt>5066</cmt>
+ <desc>5066</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.439224112" lon="-71.119687466">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>5067</name>
+ <cmt>5067</cmt>
+ <desc>5067</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.439995937" lon="-71.120927093">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:14Z</time>
+ <name>5058ROAD</name>
+ <cmt>5058ROAD</cmt>
+ <desc>5058ROAD</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.441725856" lon="-71.121672665">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:16Z</time>
+ <name>5150TANK</name>
+ <cmt>5150TANK</cmt>
+ <desc>5150TANK</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.443901493" lon="-71.122040960">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5142</name>
+ <cmt>5142</cmt>
+ <desc>5142</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.445358528" lon="-71.122849412">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5144SUMMIT</name>
+ <cmt>5144SUMMIT</cmt>
+ <desc>5144SUMMIT</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.447301189" lon="-71.121448095">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>5156</name>
+ <cmt>5156</cmt>
+ <desc>5156</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.449762692" lon="-71.122319427">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5148NANEPA</name>
+ <cmt>5148NANEPA</cmt>
+ <desc>5148NANEPA</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.451439120" lon="-71.121744527">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5258</name>
+ <cmt>5258</cmt>
+ <desc>5258</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.453255199" lon="-71.121214542">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5252PURPLE</name>
+ <cmt>5252PURPLE</cmt>
+ <desc>5252PURPLE</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.456255272" lon="-71.119355103">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527631</name>
+ <cmt>527631</cmt>
+ <desc>527631</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.456594517" lon="-71.119678484">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527614</name>
+ <cmt>527614</cmt>
+ <desc>527614</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.457386083" lon="-71.119849157">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5267OBSTAC</name>
+ <cmt>5267OBSTAC</cmt>
+ <desc>5267OBSTAC</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.458151031" lon="-71.119130533">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5278</name>
+ <cmt>5278</cmt>
+ <desc>5278</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.459374929" lon="-71.117693285">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5289</name>
+ <cmt>5289</cmt>
+ <desc>5289</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.464183815" lon="-71.119831191">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5374FIRE</name>
+ <cmt>5374FIRE</cmt>
+ <desc>5374FIRE</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.465647026" lon="-71.119400017">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>5376</name>
+ <cmt>5376</cmt>
+ <desc>5376</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.465913061" lon="-71.119328154">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5376STREAM</name>
+ <cmt>5376STREAM</cmt>
+ <desc>5376STREAM</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.467110202" lon="-71.113570180">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>6328</name>
+ <cmt>6328</cmt>
+ <desc>6328</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.466458428" lon="-71.110066888">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635722</name>
+ <cmt>635722</cmt>
+ <desc>635722</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.466558190" lon="-71.109411144">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635783</name>
+ <cmt>635783</cmt>
+ <desc>635783</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.463492103" lon="-71.107120530">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6373</name>
+ <cmt>6373</cmt>
+ <desc>6373</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.465686931" lon="-71.107363066">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>BEAR HILL</name>
+ <cmt>BEAR HILL</cmt>
+ <desc>BEAR HILL</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.459986868" lon="-71.106168354">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6289</name>
+ <cmt>6289</cmt>
+ <desc>6289</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.457618894" lon="-71.105117366">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6297</name>
+ <cmt>6297</cmt>
+ <desc>6297</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.453847243" lon="-71.105207194">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6283</name>
+ <cmt>6283</cmt>
+ <desc>6283</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.451432468" lon="-71.105413798">
+ <ele>0.000000</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6280</name>
+ <cmt>6280</cmt>
+ <desc>6280</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.448445467" lon="-71.106159371">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6177</name>
+ <cmt>6177</cmt>
+ <desc>6177</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.447806803" lon="-71.106626476">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6176</name>
+ <cmt>6176</cmt>
+ <desc>6176</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.444773057" lon="-71.108881159">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6153</name>
+ <cmt>6153</cmt>
+ <desc>6153</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.443588791" lon="-71.106303096">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6171</name>
+ <cmt>6171</cmt>
+ <desc>6171</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.442983343" lon="-71.111441257">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>6131</name>
+ <cmt>6131</cmt>
+ <desc>6131</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.442198248" lon="-71.110974151">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6130</name>
+ <cmt>6130</cmt>
+ <desc>6130</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.441752469" lon="-71.113219851">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6029</name>
+ <cmt>6029</cmt>
+ <desc>6029</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.439017846" lon="-71.114459477">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6006</name>
+ <cmt>6006</cmt>
+ <desc>6006</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.436755537" lon="-71.113219851">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.434978901" lon="-71.109941129">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>PANTHRCAVE</name>
+ <cmt>PANTHRCAVE</cmt>
+ <desc>PANTHRCAVE</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.431239149" lon="-71.109240471">
+ <ele>0.000000</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>GATE6</name>
+ <cmt>GATE6</cmt>
+ <desc>GATE6</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.430953003" lon="-71.107623567">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:15Z</time>
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>BELLEVUE</desc>
+ <sym>Normal</sym>
+ </rtept>
+</rte>
+<rte>
+ <name>Route2</name>
+ <rtept lat="42.445358528" lon="-71.122849412">
+ <ele>0.000000</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5144SUMMIT</name>
+ <cmt>5144SUMMIT</cmt>
+ <desc>5144SUMMIT</desc>
+ <sym>Normal</sym>
+ </rtept>
+ <rtept lat="42.441725856" lon="-71.121672665">
+ <ele>0.000000</ele>
+<time>2001-06-02T00:18:16Z</time>
+ <name>5150TANK</name>
+ <cmt>5150TANK</cmt>
+ <desc>5150TANK</desc>
+ <sym>Normal</sym>
+ </rtept>
+</rte>
+<rte>
+ <name>Route3</name>
+ <rtept lat="42.449869134" lon="-71.119301206">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5179DEAD</name>
+ <cmt>5179DEAD</cmt>
+ <desc>5179DEAD</desc>
+ <sym>Danger</sym>
+ </rtept>
+ <rtept lat="42.456468132" lon="-71.124654954">
+ <ele>0.000000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5236BRIDGE</name>
+ <cmt>5236BRIDGE</cmt>
+ <desc>5236BRIDGE</desc>
+ <sym>Normal</sym>
+ </rtept>
+</rte>
+</gpx>
${PNAME} -i iblue747 -f ${REFERENCE}/track/iblue747.csv -o gpx -F ${TMPDIR}/iblue747~csv.gpx
compare ${REFERENCE}/track/iblue747~csv.gpx ${TMPDIR}/iblue747~csv.gpx
+#
+# Humminbird waypoints/routes
+#
+${PNAME} -i humminbird -f ${REFERENCE}/humminbird.hwr -o unicsv,utc=0 -F ${TMPDIR}/humminbird~hwr.csv
+compare ${REFERENCE}/humminbird~hwr.csv ${TMPDIR}/humminbird~hwr.csv
+${PNAME} -i humminbird -f ${REFERENCE}/humminbird.hwr -o humminbird -F ${TMPDIR}/humminbird.hwr
+bincompare ${REFERENCE}/humminbird.hwr ${TMPDIR}/humminbird.hwr
+${PNAME} -i humminbird -f ${REFERENCE}/route/humminbird.hwr -o gpx -F ${TMPDIR}/humminbird~hwr.gpx
+compare ${REFERENCE}/route/humminbird~hwr.gpx ${TMPDIR}/humminbird~hwr.gpx
+
exit 0
{
&humminbird_vecs,
"humminbird",
- "Humminbird waypoints (.hwr)",
+ "Humminbird waypoints and routes (.hwr)",
"hwr"
},
{
<para>
- This format supports <ulink url="http://www.humminbird.com">Humminbird</ulink> waypoints (.hwr files).
+ This format supports <ulink url="http://www.humminbird.com">Humminbird</ulink> waypoints and routes (.hwr files).
</para>
<para>
If you do "save all nav data" on the device, you'll get a
<para>
Known limits:
<simplelist>
- <member>max 12 characters for waypoint names.</member>
- <member>Only does waypoints. Tracks are in a different file
+ <member>Only does waypoints and routes. Tracks are in a different file
(like <filename>000.ht</filename>).</member>
+ <member>max 12 characters for waypoint names.</member>
+ <member>max 20 characters for route names.</member>
+ <member>max 50 points per route. Use <link linkend="filter_simplify">simplify</link> filter (count=50 or less) if you have routes with more points!</member>
</simplelist>
</para>